package com.metro.qd.iscs.l2;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.metro.json.JacksonMapper;
import com.metro.qd.iscs.EventLevel;
import org.joda.time.DateTime;

import java.util.Objects;

public class EventValue extends com.metro.qd.iscs.EventValue {
	private static final long serialVersionUID = 1L;

	/** 发生时间年月日时分秒 */
	@JsonProperty("cur_time")
	public DateTime timestamp;

	/** 报警等级 */
	@JsonProperty("Alarm_Level")
	public int level;

	/** 事件类型: 事项的具体类型， */
	@JsonProperty("Event_Type")
	public int type;

	/** 当前状态点值，或一些动作状态 */
	@JsonProperty("Cur_Status")
	public int status;

	/** 一般存放厂站代码（如qdba）或主机名 */
	@JsonProperty("Event_Obj_Group_Name")
	public String groupName;

	/** 事件对象名0，事件报警点的点代码 */
	@JsonProperty("Event_Obj_Name0")
	public String objName;

	/** 事件文字描述: 系统按事项句定义形成的事项文字描述 */
	@JsonProperty("Event_Desc")
	public String desc;

	/** 线路代号 */
	public int line;

	/** 车站代号 */
	public int station;

	/** 设备代码 */
	@JsonProperty("of_device")
	public String device;

	/** 专业代码 */
	public String system;

	/** 确认人 */
	@JsonProperty("Confirm_Person")
	public String confirmSubject;

	/** 确认日期与时间 */
	@JsonProperty("Confirm_time")
	@JsonFormat(pattern = JacksonMapper.PATTERN_DATETIME)
	public DateTime confirmTime;

	@Override
	public Object getUid() {
		return null;
	}

	@Override
	public DateTime getOccur() {
		return timestamp;
	}

	@Override
	public EventLevel getLevel() {
		switch (level) {
		}
		return null;
	}

	@Override
	public Object getObject() {
		return device;
	}

	@Override
	public Object getMetric() {
		return objName;
	}

	@Override
	public Number getVal() {
		return status;
	}

	@Override
	public String getDesc() {
		return desc;
	}

	@Override
	public boolean isAck() {
		return Objects.nonNull(confirmSubject) || Objects.nonNull(confirmTime);
	}

	@Override
	public String getAckSubject() {
		return confirmSubject;
	}

	@Override
	public DateTime getAckTime() {
		return confirmTime;
	}
}
